1. Field of the Invention
The present invention generally relates to task execution and, more specifically, to multi-channel time slice groups.
2. Description of the Related Art
A graphics processing unit (GPU) includes a large array of streaming multiprocessors (SMs) that are configured to execute work generated by different applications within the system. Work generated by applications for execution within the GPU may belong to several classes including graphics work, compute work, ray tracing work etc. Each of these classes of work has different characteristics.
Compute work is typically organized such that different groupings of tasks within the compute work can execute concurrently. However, the host unit in the GPU, launches the compute work task sequentially. Therefore, if a particular task is waiting for a previous task to complete and the previous task uses only a fraction of the SMs, then the unused SMs are idle. Such a scenario is highly undesirable as the processing power of the SMs is wasted while the SMs remain idle and compute work that can be processed more efficiently takes longer to process.
As is known in the art, a solution to the above problem is to include each group of tasks in a different channel, such that, when one channel is stalled, tasks specified by a different channel can begin executing. However, in such an implementation, the SMs must idle and a context switching operation is needed each time a channel is switched. As is well-known to those skilled in the art, unnecessarily idling a parallel machine is inefficient and context switching operations are both time and processing intensive. Therefore, requiring a context switch operation every time a channel is switched causes unnecessary performance degradation on the system.
Accordingly, what is needed in the art is a system and method for allowing multiple independent streams of work to run concurrently within a single context.